/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proyectoformulariodinamico;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Stack;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;

/**
 *
 * @author David
 */
public class Formulario extends JPanel {
   
    private JPanel pnlTitulo;
    private JTextField txtTitulo;
    private JLabel lblTitulo;
    
    private Pregunta p;
    private Stack<Pregunta> preguntas = new Stack();
    private LinkedList<QuestionF> F_llenos = new LinkedList<>();
    private String[] tipoPregunta = {"Texto","Texto de párrafo","Tipo test"
                                    ,"Casilla de verificación","Elejir de una lista"};
    private JComboBox cmbtipos = new JComboBox(tipoPregunta);
    private JLabel lblAgregar = new JLabel("Añadir elemento");
    private JPanel pnlC = new JPanel();
    private JScrollPane pnlS= new JScrollPane();
    
    private JButton btnEnviar,btnLimpiar;
    
    private String nombreFormulario;
    
    private int cont = 0;
    private int numeroPreguntas = 0;
    
    public Formulario(){
        
        setLayout(new BorderLayout());
        JPanel pnlN = new JPanel(); 
        pnlS.setViewportView(pnlC);
        pnlC.setLayout(new BoxLayout(pnlC,BoxLayout.PAGE_AXIS));
        
        pnlTitulo = new JPanel();
        pnlTitulo.setLayout(new FlowLayout(FlowLayout.LEFT));
        pnlTitulo.add(lblTitulo = new JLabel());
        lblTitulo.setVisible(false);
        pnlTitulo.add(txtTitulo = new JTextField(35));
        txtTitulo.setText("Formulario sin titulo");
        txtTitulo.setFont(new Font("Times New Roman",Font.BOLD,17));
        pnlC.add(pnlTitulo,BorderLayout.CENTER);
        
        add(pnlN,BorderLayout.NORTH);
        add(pnlS,BorderLayout.CENTER);
        pnlN.setLayout(new FlowLayout(FlowLayout.LEFT));
        pnlN.add(lblAgregar);
        pnlN.add(cmbtipos);
        pnlN.add(btnEnviar = new JButton("Enviar"));
        pnlN.add(btnLimpiar = new JButton("Limpiar"));
        cmbtipos.setSelectedIndex(1);
        cmbtipos.addItemListener(new java.awt.event.ItemListener() {
            @Override
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmbtiposItemStateChanged(evt);
            }
        });
        
        cmbtipos.setSelectedIndex(0);
        updateUI();
        
        btnEnviar.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEnviarActionPerformed(evt);
            }
        });
        
        btnLimpiar.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiarActionPerformed(evt);
            }
        });
        
        txtTitulo.addKeyListener(new KeyAdapter() {
            @Override
                public void keyPressed(KeyEvent evt) {
                    txtTituloKeyPressed(evt);
                }
            });
        
    }

    public String getNombreFormulario() {
        return nombreFormulario;
    }
    
    private void txtTituloKeyPressed(KeyEvent evt) {
        if(evt.getKeyCode() == KeyEvent.VK_ENTER){
            lblTitulo.setText(txtTitulo.getText());
            lblTitulo.setFont(new Font("Times New Roman",Font.BOLD,17));
            lblTitulo.setForeground(Color.BLUE);
            lblTitulo.setVisible(true);
            txtTitulo.setVisible(false);
            nombreFormulario = txtTitulo.getText();
        }
    }
    
    private void cmbtiposItemStateChanged(java.awt.event.ItemEvent evt) {
        int index = cmbtipos.getSelectedIndex();
        cont++;
        if(cont == 1){
            System.out.println("Indice "+index);
            p = new Pregunta(index);
            preguntas.add(p);            
            pnlC.add(preguntas.peek());
            numeroPreguntas++;
            updateUI();
        }
        if(cont == 2){
            cont = 0;
        }
    }
    
    private void btnEnviarActionPerformed(java.awt.event.ActionEvent evt){
        QuestionF q = new QuestionF();
        try {
            for(int i=0;i<preguntas.size();i++){
                System.out.println("----Pregunta "+preguntas.get(i).getQuestion().getTitulo()+"  "+"Respuesta "+preguntas.get(i).getQuestion().getPregunta());
                q.addQuestion(new Question(preguntas.get(i).getQuestion().getTitulo(),preguntas.get(i).getQuestion().getPregunta()));
            }
            F_llenos.add(q);
            System.out.println("$$$$$$$$$$----> "+F_llenos.size());
            System.out.println("$$$$$$$$$$----> "+F_llenos.get(0).getSizePreguntas());
            reporteExcel();
            String file = txtTitulo.getText()+"_DatosFinales.xls";
            File f = new File(file);              
            Process p = Runtime.getRuntime().exec ("rundll32 SHELL32.DLL,ShellExec_RunDLL "+f.getAbsolutePath());
        } catch (IOException ex) {
            Logger.getLogger(Formulario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt){
        for(int i=0;i<preguntas.size();i++){
            preguntas.get(i).Clear();
        }
    }
    
    public void reporteExcel(){
        try {
            HSSFWorkbook Resumen = new HSSFWorkbook();
            HSSFSheet resumen = Resumen.createSheet("Hoja1");
            
            HSSFRow fila = resumen.createRow(0);
            fila.setHeightInPoints(27);
            
            resumen.addMergedRegion(new CellRangeAddress(0,0,0,7));
            
            HSSFFont fuente = Resumen.createFont();//..........fuente 0
            fuente.setFontHeightInPoints((short)14);
            fuente.setFontName("Arial");
            fuente.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
            fuente.setItalic(true);
            
            HSSFCellStyle estilo = Resumen.createCellStyle();//..........estilo 0
            estilo.setFont(fuente);
            estilo.setWrapText(true);
            estilo.setAlignment(HSSFCellStyle. ALIGN_CENTER);
            estilo.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            //sombreado
            estilo.setFillForegroundColor((short)22);
            estilo.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            //bordes
            estilo.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);
            estilo.setTopBorderColor((short)8);
            estilo.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);
            estilo.setLeftBorderColor((short)8);
            estilo.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);
            estilo.setRightBorderColor((short)8);
            estilo.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);
            estilo.setBottomBorderColor((short)8);
            
            HSSFCell celda = fila.createCell((short)0);//........celda
            celda.setCellStyle(estilo);
            
            celda.setCellType(HSSFCell.CELL_TYPE_STRING);
            celda.setCellValue("INFORME DE RESULTADOS");
            
            for(int i=1;i<8;i++){
                celda = fila.createCell((short)i);
                celda.setCellStyle(estilo);
            }
            
            HSSFFont fuente1 = Resumen.createFont();//..........fuente 1
            fuente1.setFontHeightInPoints((short)12);
            fuente1.setFontName("Times New Roman");
            fuente1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);        

            HSSFCellStyle estilo1 = Resumen.createCellStyle();//..........estilo 1
            estilo1.setFont(fuente1);
            estilo1.setWrapText(true);
            //bordes
            estilo1.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);
            estilo1.setTopBorderColor((short)8);
            estilo1.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);
            estilo1.setLeftBorderColor((short)8);
            estilo1.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);
            estilo1.setRightBorderColor((short)8);
            estilo1.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);
            estilo1.setBottomBorderColor((short)8); 
            
            HSSFFont fuente2 = Resumen.createFont();//..........fuente 8
            fuente2.setFontHeightInPoints((short)12);
            fuente2.setFontName("Times New Roman");
            //fuente2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);        

            HSSFCellStyle estiloT = Resumen.createCellStyle();//..........estilo totales
            estiloT.setFont(fuente2);
            estiloT.setWrapText(true);
            estiloT.setAlignment(HSSFCellStyle. ALIGN_LEFT);        
            //bordes
            estiloT.setBorderTop(HSSFCellStyle.BORDER_THIN);
            estiloT.setTopBorderColor((short)8);
            estiloT.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            estiloT.setLeftBorderColor((short)8);
            estiloT.setBorderRight(HSSFCellStyle.BORDER_THIN);
            estiloT.setRightBorderColor((short)8);
            estiloT.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            estiloT.setBottomBorderColor((short)8);
            
            fila  = resumen.createRow((short)3);
            for(int i=0;i<preguntas.size();i++){
                celda = fila.createCell((short)i);
                celda.setCellStyle(estilo1);
                celda.setCellType(HSSFCell.CELL_TYPE_STRING);
                celda.setCellValue(preguntas.get(i).getQuestion().getTitulo());
            }
            int k = 4;
            
            for(int i=0;i<F_llenos.size();i++){ 
                fila = resumen.createRow((short)k);
                for(int j=0;j<F_llenos.get(i).getSizePreguntas();j++){
                    celda = fila.createCell((short)j);//......Item
                    celda.setCellStyle(estiloT);
                    celda.setCellType(HSSFCell.CELL_TYPE_STRING);
                    celda.setCellValue(F_llenos.get(i).getPregunta(j));
                }
                k++;
            }
            
            for(int i=0;i<preguntas.size();i++)
                resumen.autoSizeColumn(i);
            
            String file = txtTitulo.getText()+"_DatosFinales.xls";
            File objFile = new File(file);
            try (FileOutputStream out = new FileOutputStream(objFile)) {
                Resumen.write(out);
            }
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null,"El archivos esta abierto","Error",JOptionPane.ERROR_MESSAGE);
        }
    }
}
